A wide variety of memory devices can be used to maintain and store data and instructions for various computers and similar systems. In particular, flash memory is a type of electronic memory media that can be rewritten and retain content without consumption of power. Unlike dynamic random access memory (DRAM) devices and static random memory (SRAM) devices in which a single byte can be erased, flash memory devices are typically erased in fixed multi-bit blocks or sectors. Flash memory technology can include NOR flash and/or NAND flash, for example. NOR flash evolved from electrically erasable read only memory (EEPROM) chip technology, in which, unlike flash, a single byte can be erased; and NAND flash evolved from DRAM technology. Flash memory devices can be less expensive and denser as compared to many other memory devices, meaning that flash memory devices can store more data per unit area.
Flash memory has become popular, at least in part, because it combines the advantages of the high density and low cost of EPROM with the electrical erasability of EEPROM. Flash memory can be used in many portable electronic products, such as cellular phones, computers, voice recorders, thumbnail drives, and the like, as well as in many larger electronic systems, such as automobiles, airplanes, industrial control systems, etc. The fact that flash memory can be rewritten as well as its retention of data without a power source, small size and light weight have all combined to make flash memory devices a useful and popular means for transporting and maintaining data.
Nonvolatile memory (e.g., flash memory) typically comprises an array of nonvolatile memory elements wherein data (e.g. one or more bits of data) can be stored by programming desired voltage levels to selected memory elements, wherein each voltage level can correspond to a data state. Conventionally, when programming memory elements, a single program verify level is employed to facilitate programming memory elements to a desired data state. Programming of selected memory elements, or portions thereof (e.g. a memory element of a memory cell that contains multiple memory elements) can be performed by applying a number of programming pulses (e.g., voltage pulses) to the selected memory elements until the selected memory elements are programmed to the desired threshold charge level (e.g., corresponding to the program verify level) that corresponds to the desired data state. Typically, some memory elements can be programmed more quickly than other memory elements. As a result, using a single program verify level during programming can be inefficient as memory elements that can be programmed more quickly may receive voltage pulses with higher programming conditions like high programming drain voltage (Vd), gate voltage (Vg) and/or pulsewidth (pw) unnecessarily, which can result in potential overprogramming of the fast programming memory elements.
It is desirable to increase programming speed in memory devices. It is also desirable to tighten final distributions to facilitate improved reliability, density, and efficiency in memory devices.